package com.example.drainage.ui.certupload.dataview

import android.content.Intent
import android.view.View
import androidx.core.view.isVisible

/**
 * [T]:输入的纯值
 * [K]:输入包装过的值
 *
 * @author 创建人 ：yanghaozhang
 * @version 1.0
 * @package 包名 ：com.augurit.agmobile.agwater5.drainage.complex.emergency.dangerous.view.dataview
 * @createTime 创建时间 ：2021/10/31
 * @modifyBy 修改人 ：
 * @modifyTime 修改时间 ：
 * @modifyMemo 修改备注：
 */
abstract class BaseViewDataSpot<in T, in K>(var dataOutputKey: String = "", val rootView: View?, var dataTitle: String = "数据") {

    var dataID: String = "IViewDataSpot"

    // 是否必须
    var dataIsRequired: Boolean = false

    // 模式:只读/编辑
    @FormState
    private var dataFormType = FormState.STATE_EDIT

    open fun isReady(): Boolean {
        if (dataIsRequired) {
            return rootView?.isVisible ?: true
        }
        return true
    }

    /**
     * isReady() 返回false时,需要提供错误信息
     */
    open fun getToastErrorMsg(): String = "请完成${dataTitle}的输入"

    /**
     * 内部的View展示错误提示
     */
    open fun showErrorMsgInside() {

    }

    open fun setDataType(type: Int) {
        dataFormType = type
    }

    open fun getDataType(): Int {
        return dataFormType
    }

    /**
     * 设置字典组数据
     */
    open fun setDictData(dict: Any) {}

    /**
     * 设置纯值
     */
    open fun setPureData(data: T) {}

    /**
     * 获取纯值
     */
    open fun getPureData(): Any? {
        return null
    }

    /**
     * 设置包装过的值
     */
    open fun setPackData(data: K) {

    }

    /**
     * 获取包装过的值
     */
    open fun getPackData(): Any? {
        return null
    }

    open fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {

    }

    open fun clear() {}
}
